/**
 * string|number -> date
 *
 * @param value
 * @returns {*}
 */
import {DATE_REGEX, isDate} from "./isDate";
import {assertIsTrue} from "./assertIsTrue";
import {extend} from "./extend";

function parseDate(value) {
  try {
    assertIsTrue(!isDate(value), "参数格式错误、转换日期失败！", 1001);
    if (toString.call(value) === '[object Date]') {
      return value;
    }
    value = String(value);
    for (let i = 0; i < DATE_REGEX.length; i++) {
      if (DATE_REGEX[i].test(value)) {
        if (i == 0) {
          // 20180502
          return new Date(value.substring(0, 4), parseInt(value.substring(4, 6)) - 1, value.substring(6, 8));
        } else if (i == 1) {
          // 1525271112
          return new Date(value * 1000);
        } else if (i == 2) {
          // 201805021232
          return new Date(value.substring(0, 4), parseInt(value.substring(4, 6)) - 1, value.substring(6, 8), value.substring(8, 10), value.substring(10, 12));
        } else if (i == 3) {
          // 1525271088641
          return new Date(Number(value));
        } else if (i == 4) {
          // 2008-05-02
          value = value.split("-");
          return new Date(value[0], parseInt(value[1]) - 1, value[2]);
        } else if (i == 5) {
          // 2008-05-02 02:12
          let tmp1 = value.split(" ")[0].split("-"),
            tmp2 = value.split(" ")[1].split(":");
          return new Date(tmp1[0], tmp1[1], tmp1[2], tmp2[0], tmp2[1]);
        } else if (i == 6) {
          // 2008-05-02 02:12:12
          let tmp1 = value.split(" ")[0].split("-"),
            tmp2 = value.split(" ")[1].split(":");
          return new Date(tmp1[0], tmp1[1], tmp1[2], tmp2[0], tmp2[1], tmp2[2]);
        } else if (i == 7) {
          // 2008年05月02
          return new Date(value.substring(0, 4), value.substring(5, 7), value.substring(8, 10));
        } else if (i == 8) {
          // 2008年05月02日 02时12分
          return new Date(value.substring(0, 4), value.substring(5, 7), value.substring(8, 10), value.substring(12, 14), value.substring(15, 17));
        }
      }
    }
    assertIsTrue(true, "未被支持的日期格式：" + value, 1002);
  } catch (ex) {
    console.log(ex)
  }
  return value;
}

export {parseDate}
